package com.sunfeng.netty.heima.bytebuf;

import io.netty.buffer.ByteBuf;
import io.netty.buffer.ByteBufAllocator;
import lombok.extern.slf4j.Slf4j;

import static cn.hutool.core.lang.Console.log;

/**
 * @ClassName Demo01
 * @Description
 *      池化的直接内存:
 *          ByteBufAllocator.DEFAULT.buffer(10);  直接内存创建和销毁的代价昂贵，但读写性能高（少一次内存复制），适合配合池化功能一起用
 *          直接内存对 GC 压力小，因为这部分内存不受 JVM 垃圾回收的管理，但也要注意及时主动释放
 *      池化堆内存: ByteBufAllocator.DEFAULT.heapBuffer(10)
 *  池化 vs 非池化
 * * 没有池化，则每次都得创建新的 ByteBuf 实例，这个操作对直接内存代价昂贵，就算是堆内存，也会增加 GC 压力
 * * 有了池化，则可以重用池中 ByteBuf 实例，并且采用了与 jemalloc 类似的内存分配算法提升分配效率
 * * 高并发时，池化功能更节约内存，减少内存溢出的可能
 * @Author 孙峰
 * @Date 2022/10/25 15:43
 */
@Slf4j
public class Demo01 {
    public static void main(String[] args) {
        log(ByteBufAllocator.DEFAULT.buffer(10));
        log(ByteBufAllocator.DEFAULT.directBuffer(10));
        log(ByteBufAllocator.DEFAULT.heapBuffer(10));
    }
}
